iT邦幫忙

2025 iThome 鐵人賽

DAY 20
0
生成式 AI

三十天解鎖上下文超能力:MCP 實戰系列 第 20

Day 20 - 使用 adk 開一個 Wazuh MCP API Server 出來吧!!!

  • 分享至 

  • xImage
  •  

大家好,鐵人賽第二十天,今天我們要進行一個非常酷炫且實用的整合!

在前幾天,我們學習了如何使用 adk-mcp 來建立天氣工具,並將其部署為 API。今天,我們將把這個能力推向一個全新的高度——我們將整合一個開源的 Wazuh MCP Server,讓我們的 AI Agent 能夠直接查詢 Wazuh 的警報和代理程式狀態!

Wazuh 是一個開源的 XDR (eXtended Detection and Response) 平台,提供安全監控、日誌分析、入侵偵測等功能。想像一下,你的 AI Agent 不再只是回答問題,它還能成為你的資安助手,主動或被動地分析安全事件!

我們將利用 adk-mcp 作為 MCP Host,連接到 Wazuh MCP Server,然後透過 adk api_server 將這個具備「資安洞察力」的 Agent 暴露為一個 API,為前端應用程式提供服務。

我們將假設讀者已經安裝並配置好 Wazuh Manager 和至少一個 Agent


一、Wazuh MCP Server 簡介與配置

這個由社群開發的 Wazuh MCP Server 是一個 Rust 語言實現的服務,它將 Wazuh 的 RESTful API 和 Indexer (OpenSearch/Elasticsearch) 包裝成符合 MCP 協議的工具。

1. 建立 .env 設定檔

Wazuh MCP Server 運行時需要知道如何連接到你的 Wazuh Manager API 和 Indexer。我們透過一個 .env 檔案來提供這些機敏資訊。

在你的專案根目錄下,建立一個名為 .env 的檔案,並填入以下內容(請替換為你實際的 Wazuh 配置):

WAZUH_API_HOST=your_wazuh_manager_api_host
WAZUH_API_PORT=55000
WAZUH_API_USERNAME=your_wazuh_api_user
WAZUH_API_PASSWORD=your_wazuh_api_password
WAZUH_INDEXER_HOST=your_wazuh_indexer_host
WAZUH_INDEXER_PORT=9200
WAZUH_INDEXER_USERNAME=your_wazuh_indexer_user
WAZUH_INDEXER_PASSWORD=your_wazuh_indexer_password
WAZUH_VERIFY_SSL=false
WAZUH_TEST_PROTOCOL=https
RUST_LOG=info

2. Wazuh 連線參數取得方法

變數 說明 取得方法
WAZUH_API_HOST Wazuh Manager API 的主機名稱或 IP 到你安裝 Wazuh Manager 的那台機器,輸入 hostname -I 或在 Wazuh 部署文件中查 IP。若有設定網域(如 wazuh.mycompany.com),可直接用網域。
WAZUH_API_PORT Wazuh API 的連接埠,預設是 55000 如果沒改過設定,可以直接用 55000;否則可查看 /var/ossec/api/configuration/api.yamlport: 欄位
WAZUH_API_USERNAME Wazuh API 登入帳號 預設是 wazuh(如果沒改過)。可以用 sudo /var/ossec/bin/wazuh-apid -u 查看 API 使用者,或查 Wazuh Manager 建立的帳號文件。
WAZUH_API_PASSWORD Wazuh API 登入密碼 在安裝時產生,或管理員自行設定。若忘了,可以在 Manager 上用 sudo /var/ossec/bin/wazuh-apid -u wazuh 來重設密碼。

變數 說明 取得方法
WAZUH_INDEXER_HOST Indexer 伺服器的主機名稱或 IP 到安裝 Wazuh Indexer 的機器查看 IP 或網域
WAZUH_INDEXER_PORT Indexer 的連接埠 預設 9200
WAZUH_INDEXER_USERNAME Indexer 登入帳號 預設是 admin(除非有自訂)
WAZUH_INDEXER_PASSWORD Indexer 登入密碼 安裝時在 /etc/wazuh-indexer/opensearch-security/admin-password(或 /etc/elasticsearch)可找到,或問部署的人員

變數 說明
WAZUH_VERIFY_SSL 是否驗證 SSL 憑證,false 表示忽略
WAZUH_TEST_PROTOCOL 使用協議,通常是 https
RUST_LOG 設定日誌等級,info 表示一般訊息

提示: 如果你不確定 Wazuh 的配置,可以使用以下指令來協助查詢:

# 先確認服務狀態
sudo systemctl status wazuh-dashboard wazuh-manager wazuh-indexer

查看 Dashboard 連 Manager API 的帳密

sudo sed -n '1,200p' /usr/share/wazuh-dashboard/data/wazuh/config/wazuh.yml 2\>/dev/null
sudo sed -n '1,200p' /etc/wazuh-dashboard/wazuh.yml 2\>/dev/null
sudo sed -n '/^hosts:/,$p' /usr/share/wazuh-dashboard/data/wazuh/config/wazuh.yml 2\>/dev/null

查看 Dashboard 連 Indexer(OpenSearch)的帳密

sudo grep -E "opensearch.username|opensearch.password" /etc/wazuh-dashboard/opensearch\_dashboards.yml

3. 使用 Docker 啟動 Wazuh MCP Server

Wazuh MCP Server 通常以 Docker 容器運行。請確保你的 Docker Desktop 已經啟動

docker run -d --name mcp-wazuh-server --env-file .env -p 8080:8080 gbrigandi/mcp-server-wazuh
  • --env-file .env: 告訴 Docker 容器去讀取我們剛才建立的 .env 檔案。
  • -p 8080:8080: 將容器內部的 8080 埠口映射到主機的 8080 埠口。這個伺服器會在這個埠口提供 MCP 服務。

二、ADK Agent 的整合與 API 化

現在 Wazuh MCP Server 已經運行起來了,它會將 Wazuh 的功能封裝為 list_alerts (列出警報)、get_agent_info (獲取代理程式資訊) 等 MCP 工具。我們需要讓 adk-mcp 知道如何連接到它。

1. 建立 multi_tool_agent.py

建立一個名為 multi_tool_agent.py 的檔案。這個 Agent 將結合之前學過的 MCPToolset 來連接 Wazuh MCP Server。

import os
from google.adk.agents import LlmAgent
from google.adk.tools.mcp_tool.mcp_toolset import MCPToolset
from google.adk.tools.mcp_tool.mcp_session_manager import StdioConnectionParams
from mcp import StdioServerParameters

wazuh_toolset = MCPToolset(
    connection_params=StdioConnectionParams(
        server_params=StdioServerParameters(
            command='docker',
            args=[
                "run", "--rm", "-i",
                "--env-file", "/Users/imac/WazuhMcp/.env", # 請將此路徑替換為你的 WazuhMcp .env 檔案路徑
                "ghcr.io/gbrigandi/mcp-server-wazuh:latest"
            ],
        ),
    ),
)

root_agent = LlmAgent(
    model='gemini-2.5-flash', 
    name='wazuh_agent', 
    instruction=(
        "你是一個 Wazuh 資安助理。你的任務是使用提供的工具來回答關於 Wazuh 平台的查詢。"
        "如果使用者說查詢最近幾筆的話,就limit在5筆以內。"
        "請根據使用者的問題,選擇最合適的工具來回覆準確的資訊,並且把得到的資訊彙整起來給使用者。"
    ),
    tools=[
        wazuh_toolset
    ],
)

2. 配置 Google API Key (.env)

我們的 Agent 需要呼叫 Google Gemini 模型,所以請在專案根目錄下建立另一個 .env 檔案,並填入你的 Google API Key:

GOOGLE_GENAI_USE_VERTEXAI=FALSE
GOOGLE_API_KEY=YourGoogleApiKey

3. 啟動 adk api_server

現在,我們將這個具備 Wazuh 查詢能力的 Agent,透過 adk api_server 暴露為一個 Web API。

  1. 進入你的 Python 虛擬環境。
  2. 專案根目錄下執行:
    adk api_server .
    
    這會啟動一個 API 服務,通常在 http://localhost:8000。這個服務會自動偵測當前目錄下的 Agent 檔案。

截圖 2025-09-22 晚上9.41.22

三、透過 API 呼叫 Agent 並查詢 Wazuh

adk api_server 提供了完整的 RESTful API,讓我們可以透過 HTTP 請求來與 Agent 互動。

1. 建立 Session ID

首先,我們需要為每次對話建立一個 Session ID。這讓 Agent 能在多輪對話中保持上下文。

  • 開啟另一個終端機 (確保 adk api_server 仍在運行)。
  • 執行以下 curl 指令:
curl -X POST http://localhost:8000/apps/multi_tool_agent/users/u_123/sessions/s_123 \
  -H "Content-Type: application/json" \
  -d '{"state": {"key1": "value1", "key2": 42}}'
  • multi_tool_agent:這是我們在 multi_tool_agent.py 中 Agent 實例的 name。簡單來說就是你的{app_name}。
  • u_123, s_123: 使用者 ID 和會話 ID,你可以自定義。

終端畫面:
截圖 2025-09-22 晚上9.51.45

後端畫面:
截圖 2025-09-22 晚上9.52.33

2. 發送 Wazuh 查詢請求

現在,我們可以向 Agent 發送實際的查詢請求了!

curl -X POST http://localhost:8000/run \
-H "Content-Type: application/json" \
-d '{
    "app_name": "multi_tool_agent",
    "user_id": "u_123",
    "session_id": "s_123",
    "new_message": {
        "role": "user",
        "parts": [{
            "text": "請給我最近五筆wazuh警報"
        }]
    }
}'
  • app_name: 同樣是我們 Agent 的 name
  • new_message: 包含使用者提出的問題。

如果你已經有運行中的 Wazuh Agent 產生警報,你將會收到來自 Agent 的回應,內容是從 Wazuh MCP Server 獲取到的最新警報資訊!

終端畫面:
截圖 2025-09-22 晚上9.53.25

下面是adk mcp給我的回覆:
截圖 2025-09-22 晚上9.55.43

後端畫面:前面會跳一大堆 DEBUG,我這邊就省略囉~~
截圖 2025-09-22 晚上9.54.10

四、今日總結

今天,我們完成了一項極具挑戰和價值的整合:

  1. 成功啟動 Wazuh MCP Server: 將 Wazuh 平台的能力透過標準的 MCP 協議暴露出來。
  2. adk-mcp 整合外部工具: 再次證明 MCPToolsetHttpConnectionParams 是連接任何基於 HTTP 的 MCP Server 的利器。
  3. 將 Agent API 化: 透過 adk api_server,我們的 Wazuh Security Agent 不再只是一個本地腳本,而是一個可供任何 HTTP 客戶端呼叫的強大服務。

這不僅僅是 MCP 的實踐,更是展示了如何將傳統的 IT 維運與現代 AI Agent 深度融合,為資安監控帶來全新的可能性。

接下來幾天,我們將利用今天部署的這個 adk-api 服務,來打造一個 Swift iOS App !敬請期待!


上一篇
Day 19 - 使用 FastMCP 打造天氣查詢工具 weather server
下一篇
Day 21 - 跨平台實戰 I 架構先行:搭建 iOS 專案與資料模型
系列文
三十天解鎖上下文超能力:MCP 實戰21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
justin_log
iT邦新手 5 級 ‧ 2025-10-04 16:22:06

今天乾貨滿滿!
期待明天的iOS App/images/emoticon/emoticon24.gif

我要留言

立即登入留言